package com.guojiang.guoaicodemother.core.saver;

import cn.hutool.core.util.StrUtil;
import com.guojiang.guoaicodemother.ai.model.MultiFileCodeResult;
import com.guojiang.guoaicodemother.exception.BusinessException;
import com.guojiang.guoaicodemother.exception.ErrorCode;
import com.guojiang.guoaicodemother.model.enums.CodeGenTypeEnum;

/**
 * 多文件代码保存模板（模板方法模式-子类模板）
 *
 * @author guojiang
 */
public class MultiFileCodeFileSaverTemplate extends CodeFileSaverTemplate<MultiFileCodeResult> {
    
    /**
     * 子类返回代码类型
     *
     * @return CodeGenTypeEnum
     */
    @Override
    protected CodeGenTypeEnum getCodeType() {
        return CodeGenTypeEnum.MULTI_FILE;
    }

    /**
     * 子类实现保存文件具体逻辑
     *
     * @param codeParserResult
     * @param baseFileDir
     */
    @Override
    protected void saveFile(MultiFileCodeResult codeParserResult, String baseFileDir) {
        saveMultiFileCode(codeParserResult, baseFileDir);
    }

    /**
     * 子类覆盖父类验证合法性逻辑
     *
     * @param codeParserResult
     */
    @Override
    protected void validateInput(MultiFileCodeResult codeParserResult) {
        super.validateInput(codeParserResult);
        if (StrUtil.isBlank(codeParserResult.getHtmlCode())
                || StrUtil.isBlank(codeParserResult.getJsCode())
                || StrUtil.isBlank(codeParserResult.getCssCode())) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "不能保存空的多文件代码");
        }
    }
}
